package com.ash;

import java.io.File;
import java.util.Date;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;

/**
 * 如果该工程是在javaEE运行 即有导入javaee包是，需要删除javaee包中的mail包 不然会冲突
 *
 * @author ash
 */
public class SendMail {
	public static void main(String[] args) {
		SendMail.one();
//		SendMail.two();
//
//		SendMail.three();
	}

	private static void three() {
		try {
			Properties properties = System.getProperties();
			properties.put("mail.smtp.host", "smtp.163.com");// 设置发送由件服务器的地址
			properties.put("mail.smtp.port", "25");// 设置发送邮件服务器的端口
			properties.put("mail.smtp.auth", "true");// 需要进行认证
			// 需要进行认证，那么创建用户名和密码
			MyValidate validate = new MyValidate("zjhptxl@163.com", "UFOWUAGEBGSONWQF");

			Session session = Session.getDefaultInstance(properties, validate);
			// 然后根据Session构建一个邮件信息，将Session做为参数传递
			MimeMessage message = new MimeMessage(session);
			// 设置邮件的发送者
			Address srcForm = new InternetAddress("zjhptxl@163.com");
			message.setFrom(srcForm);
			// 设置邮件的接收者。
			Address toForm = new InternetAddress("javacrazy2012@163.com");
			message.setRecipient(Message.RecipientType.TO, toForm);
			// 设置邮件的主题
			message.setSubject("发送附件");
			// 设置邮件的内容
			// 这边与发送纯文本的不太一样
			Multipart multiPart = new MimeMultipart();
			BodyPart bodyPart = new MimeBodyPart();
			bodyPart.setContent("这是新发的邮件\r\n,<br>&nbsp;以纯文本方式发送的", "text/html;charset=GBK");
			multiPart.addBodyPart(bodyPart);
			// 不再是setText,而是setContext
			message.setContent(multiPart);

			// 为邮件添加出附件
			// 创建一个用于存放附件的对象。
			String[] fileList = new String[2];
			fileList[0] = "/me.jpg";
			fileList[1] = "/me.jpg";

			for (int i = 0; i < fileList.length; i++) {
				MimeBodyPart filePart = new MimeBodyPart();
				File filepath = new File(SendMail.class.getResource(fileList[i]).getFile());

				System.out.println(filepath.getAbsoluteFile());

				FileDataSource fds = new FileDataSource(filepath);
				System.out.println(fds);
				filePart.setDataHandler(new DataHandler(fds));
				// 为附件设置文件名
				filePart.setFileName(MimeUtility.encodeWord(filepath.getName(), "GBK", null));
				// 在主邮件中加入附件
				multiPart.addBodyPart(filePart);
			}

			// 设置邮件发送的时间
			message.setSentDate(new Date());
			message.saveChanges();

			// 或者用底下的这种发送方式
			//			Transport transport = session.getTransport("smtp");
			//			transport.connect("smtp.163.com", "zjhptxl@163.com", "zjh7328381@");
			//			transport.send(message);
			Transport.send(message);
			System.out.println("附件格式的邮件发送成功");

		} catch (Exception ex) {
			System.out.println("邮件发送失败");
			ex.printStackTrace();
		}

	}

	private static void two() {
		try {
			Properties properties = System.getProperties();
			properties.put("mail.smtp.host", "smtp.163.com");// 设置发送由件服务器的地址
			properties.put("mail.smtp.port", "25");// 设置发送邮件服务器的端口
			properties.put("mail.smtp.auth", "true");// 需要进行认证
			// 需要进行认证，那么创建用户名和密码
			MyValidate validate = new MyValidate("zjhptxl@163.com", "UFOWUAGEBGSONWQF");

			Session session = Session.getDefaultInstance(properties, validate);
			// 然后根据Session构建一个邮件信息，将Session做为参数传递
			MimeMessage message = new MimeMessage(session);
			// 设置邮件的发送者
			Address srcForm = new InternetAddress("zjhptxl@163.com");
			message.setFrom(srcForm);
			// 设置邮件的接收者。
			Address toForm = new InternetAddress("javacrazy2012@163.com");
			message.setRecipient(Message.RecipientType.TO, toForm);
			// 设置邮件的主题
			message.setSubject("可以显示HTML的信息");
			// 设置邮件的内容
			Multipart multiPart = new MimeMultipart();
			BodyPart bodyPart = new MimeBodyPart();
			bodyPart.setContent("这是新发的邮件\r\n,<br>&nbsp;以纯文本方式发送的", "text/html;charset=GBK");
			multiPart.addBodyPart(bodyPart);
			// 不再是setText,而是setContext
			message.setContent(multiPart);

			// 设置邮件发送的时间
			message.setSentDate(new Date());
			message.saveChanges();

			Transport.send(message);

			System.out.println("HTML格式的邮件发送成功");

		} catch (Exception ex) {
			System.out.println("邮件发送失败");
			ex.printStackTrace();
		}
	}

	private static void one() {
		try {
			Properties properties = System.getProperties();
			properties.put("mail.smtp.host", "smtp.163.com");// 设置发送由件服务器的地址
			properties.put("mail.smtp.port", "25");// 设置发送邮件服务器的端口
			properties.put("mail.smtp.auth", "true");// 需要进行认证
			// 需要进行认证，那么创建用户名和密码
			MyValidate validate = new MyValidate("zjhptxl@163.com", "UFOWUAGEBGSONWQF");

			Session session = Session.getDefaultInstance(properties, validate);

			// 然后根据Session构建一个邮件信息，将Session做为参数传递
			MimeMessage message = new MimeMessage(session);
			// 设置邮件的发送者
			Address srcForm = new InternetAddress("zjhptxl@163.com");
			message.setFrom(srcForm);

			// 设置邮件的接收者。
			Address toForm = new InternetAddress("javacrazy2012@163.com");
			message.setRecipient(Message.RecipientType.TO, toForm);

			// 设置邮件的主题
			message.setSubject("邮件主题，JavaMail发送邮件测试");
			// 设置邮件的内容
			message.setText("这是新发的邮件\r\n,<br>&nbsp;以纯文本方式发送的");
			// 设置邮件发送的时间
			message.setSentDate(new Date());

			message.saveChanges();

			Transport.send(message);
			// 或者用底下的这种发送方式
			System.out.println("邮件发送成功");

		} catch (Exception ex) {
			System.out.println("邮件发送失败");
			ex.printStackTrace();
		}

	}
}
